home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
dskut
/
hdsource.zip
/
SCRMGR.ASM
< prev
next >
Wrap
Assembly Source File
|
1986-05-17
|
40KB
|
1,152 lines
PAGE 86,132 ;PAGE WIDTH, LENGTH
TITLE SCREEN INPUT/OUTPUT MANAGER
; *********************************************************************
; * *
; * AUTHOR: JIM BRACKING *
; * MODULE NAME: SCRMGR *
; * VERSION: 1:0 *
; * DECRIPTION: THIS MODULE IS CALLED BY OTHER PROGRAMS TO *
; * PERFORM THE FOLLOWING FUNCTION: *
; * *
; * 1: SCREEN WRITES. *
; * 2: SCREEN INPUT AND EDITING. *
; * *
; * ALL SCREEN WRITES ARE DIRECT TO THE VIDEO *
; * RAM. *
; * *
; * PARAMETERS: AH = FUNCTION CODE *
; * *
; * 00 = SCREEN WRITE *
; * 01 = SCREEN INPUT *
; * 02 = SET BORDER COLOR *
; * AL = BORDER COLOR *
; * 03 = CLEAR THE SCREEN *
; * AL = ATTRIBUTE *
; * BH = STARTING ROW *
; * BL = STARTING COLUMN *
; * CH = ENDING ROW *
; * CL = ENDING COLUMN *
; * 04 = SCROLL SCREEN UP 1 LINE *
; * AL = ATTRIBUTE *
; * BH = STARTING ROW *
; * BL = STARTING COLUMN *
; * CH = ENDING ROW *
; * CL = ENDING COLUMN *
; * 05 = WRITE CHARACTER *
; * AL = ATTRIBUTE *
; * BH = ROW *
; * BL = COLUMN *
; * CH = CHARACTER *
; * CL = COUNT *
; * *
; * *
; * ES:BX = POINTER TO PARAMETER LIST USED FOR *
; * SCREEN INPUT/OUTPUT *
; * *
; * OUTPUTS: AH = CURSOR POSITION IN CURRENT ENTRY *
; * AL = RETURN CODE *
; * FF = ERROR *
; * NN = EXTENDED KEY CODE *
; * BX = OFFSET OF CURRENT ENTRY *
; * *
; *********************************************************************
;
; *********************************************************************
; * LET THE OTHERS KNOW ABOUT US *
; *********************************************************************
PUBLIC SCRMGR
;
IF1
INCLUDE SCRNWORK.MAC
ENDIF
;
;
CSEG SEGMENT PUBLIC 'CODE'
ASSUME CS:CSEG
SCRMGR PROC NEAR
PUSH AX ;SAVE AX
PUSH BX ;SAVE BX
PUSH CX ;SAVE CX
PUSH DX ;SAVE DX
PUSH DI ;SAVE DI
PUSH SI ;SAVE SI
PUSH DS ;SAVE DS
PUSH ES ;SAVE ES
PUSH BP ;SAVE BP
PUSH AX ;SAVE AX
PUSH CS ;ESTABLISH
POP DS ; DATA
ASSUME DS:CSEG ; SEGMENT
JMP BY_INFO ;JMP AROUND COPYRIGHT
DB 'COPYRIGHT (C) ATI 1984 '
DB 'PROGRAM - SCRMGR '
DB ' VERSION 1.10 11/20/84'
;
INCLUDE SCRNWORK.ASM
;
; *********************************************************************
; * *
; * GENERAL WORK AREAS *
; * *
; *********************************************************************
WORK_IN LABEL BYTE ;WORK AREA
ROW DB 0 ;CURRENT ROW
COL DB 0 ;CURRENT COLUMN
ENTSEG DW 0 ;SEGMENT OF PARM ENTRY
ENTOFF DW 0 ;OFFSET OF PARM ENTRY
PARMSEG DW 0 ;PARM SEGMENT
PARMOFF DW 0 ;PARM OFFSET
SW1 DB 0 ;SWITCH1 INDICATORS
CAPS EQU 080H ;CAPS ON
INS EQU 040H ;INSERT ACTIVE
COLOR EQU 020H ;COLOR MONITOR
MONO EQU 010H ;MONOCHROME MONITOR
XLIST EQU 008H ;LIST REQUEST
ADV EQU 004H ;ENHANCED GRAFICS ADAPTER
NORM_CUR DW 0 ;NORMAL CURSOR
WIDE_CUR DW 0 ;WIDE CURSOR
SW2 DB 0 ;SPECIAL CHARACTER SWITCH
DP EQU 080H ;DECIMAL POINT
MS EQU 040H ;MINUS SIGN
RETURN DB 0 ;RETURN CODE
CURPOS DB 0 ;CURSOR POSITION FOR THIS ENTRY
;
; **********************************************************************
; * *
; * EXTENDED KEY TABLE *
; * *
; **********************************************************************
EX_KEY LABEL BYTE
DB 132 DUP(0)
ORG $-132
ORG EX_KEY+15
DB TL_INDEX ;TAB LEFT
ORG EX_KEY+59
DB 0FFH,0FFH,0FFH,0FFH,0FFH ;FUNCTION KEYS 1 TO 5
DB 0FFH,0FFH,0FFH,0FFH,0FFH ;FUNCTION KEYS 6 TO 10
ORG EX_KEY+71
DB HO_INDEX ;HOME KEY
ORG EX_KEY+72
DB CU_INDEX ;CURSOR UP
ORG EX_KEY+73
DB 0FFH ;PAGE UP
ORG EX_KEY+75
DB CL_INDEX ;CURSOR LEFT
ORG EX_KEY+77
DB CR_INDEX ;CURSOR RIGHT
ORG EX_KEY+79
DB 0FFH ;END
ORG EX_KEY+80
DB CD_INDEX ;CURSOR DOWN
ORG EX_KEY+81
DB 0FFH ;PAGE DOWN
ORG EX_KEY+82
DB IN_INDEX ;INSERT
ORG EX_KEY+83
DB DE_INDEX ;DELETE
ORG EX_KEY+84
DB 0FFH,0FFH,0FFH,0FFH,0FFH ;FUNCTION KEYS 11 TO 15
DB 0FFH,0FFH,0FFH,0FFH,0FFH ;FUNCTION KEYS 16 TO 20
ORG EX_KEY+94
DB 0FFH,0FFH,0FFH,0FFH,0FFH ;FUNCTION KEYS 21 TO 25
DB 0FFH,0FFH,0FFH,0FFH,0FFH ;FUNCTION KEYS 26 TO 30
ORG EX_KEY+104
DB 0FFH,0FFH,0FFH,0FFH,0FFH ;FUNCTION KEYS 31 TO 35
DB 0FFH,0FFH,0FFH,0FFH,0FFH ;FUNCTION KEYS 36 TO 40
ORG EX_KEY+132
; **********************************************************************
; * *
; * TRANSLATE TABLE FOR GET_INPUT ROUTINE *
; * *
; **********************************************************************
TRANTBL LABEL BYTE
DB 128 DUP(0)
ORG $-128
DB 0FFH,0FFH,0FFH
DB CB_INDEX ;CONTROL BREAK
DB 0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
ORG TRANTBL+08
DB BS_INDEX ;BACKSPACE
ORG TRANTBL+09
DB TR_INDEX ;TAB RIGHT
ORG TRANTBL+13
DB EN_INDEX ;ENTER
ORG TRANTBL+27
DB ES_INDEX ;ESC KEY
ORG TRANTBL+126
DB 0FFH,0FFH
; *********************************************************************
; * *
; * *
; * *
; *********************************************************************
BY_INFO:
CMP CS:VI_BASE,0 ;INIT COMPLETE??
JE INIT ;NO
JMP INIT_20 ;YES
INIT:
XOR AH,AH ;SET B&W
MOV AL,2 ; 80 COLUMN
INT 10H ;DO IT
MOV AH,05H ;SET ACTIVE
XOR AL,AL ; PAGE TO ZERO
INT 10H ;DO IT
INT 11H ;GET CONFIGURATION
AND AL,30H ;ONLY INTERESTED IN VIDEO SWITCHES
PUSH CX ;SAVE CX
MOV CL,4 ;SHIFT COUNT
SHR AL,CL ;ALIGN IT
POP CX ;RESTORE CX
CMP AL,00H ;ENHANCED ADAPTER??
JNE INIT_00A ;NO
MOV CS:VI_BASE,0B800H ;ENHANCED ADAPTER
MOV AL,CS:SW1 ;INDICATE
OR AL,ADV ;ENHANCED ADAPTER
MOV CS:SW1,AL
MOV AX,000BH ;WIDE CURSOR
MOV CS:WIDE_CUR,AX ;AND SAVE IT
MOV AX,0B0CH ;NORMAL CURSOR
MOV CS:NORM_CUR,AX ;AND SAVE IT
JMP INIT_10 ;CONTINUE
INIT_00A:
CMP AL,03H ;MONOCHROME??
JNE INIT_05 ;NO - MUST BE COLOR
MOV CS:VI_BASE,0B000H ;MONOCHROME BASE ADDRESS
MOV AL,CS:SW1 ;INDICATE
OR AL,MONO ;MONOCHROME MONITOR
MOV CS:SW1,AL
INIT_00:
MOV AX,000BH ;WIDE CURSOR
MOV CS:WIDE_CUR,AX ;AND SAVE IT
MOV AX,0B0CH ;NORMAL CURSOR
MOV CS:NORM_CUR,AX ;AND SAVE IT
JMP INIT_10 ;CONTINUE
INIT_05:
MOV CS:VI_BASE,0B800H ;COLOR BASE ADDRESS
MOV AL,CS:SW1 ;INDICATE
OR AL,COLOR ;COLOR MONITOR
MOV CS:SW1,AL
MOV AX,0007H ;WIDE CURSOR
MOV CS:WIDE_CUR,AX ;AND SAVE IT
MOV AX,0707H ;NORMAL CURSOR
MOV CS:NORM_CUR,AX ;AND SAVE IT
INIT_10:
POP AX ;RESTORE AX
PUSH AX ;SAVE AX
INIT_20:
MOV CS:ENTOFF,BX ;SAVE FIRST ENTRY
MOV CS:RETCODE,0 ;ZERO RETURN CODE
MO